home *** CD-ROM | disk | FTP | other *** search
/ Games of Daze / Infomagic - Games of Daze (Summer 1995) (Disc 1 of 2).iso / x2ftp / msdos / iguana / incosrc / incosrc.exe / FIRE / CREDITS.ASM next >
Assembly Source File  |  1993-08-14  |  30KB  |  1,152 lines

  1. ; ------------------------------ CREDITS.ASM ---------------------
  2. ; Credits part.
  3. ; (C) 1993 bye JCAB.
  4.  
  5. TRACE  = 0
  6.  
  7.         .MODEL SMALL
  8.         .STACK 1400
  9.         .386P
  10.         DOSSEG
  11.         LOCALS
  12.         JUMPS
  13.  
  14. INCLUDE VGASM.INC
  15. INCLUDE VBLIB.INC
  16. INCLUDE VTASM.INC
  17.  
  18.  
  19. SCRW     = 80
  20.  
  21.  
  22. DT01 SEGMENT PARA PUBLIC
  23.    EXTRN FireFont      : BYTE
  24.    EXTRN FireBlastFont : BYTE
  25. ENDS
  26.  
  27. DGROUP GROUP DT01
  28.  
  29. ;===================================================
  30.  
  31.         .CODE
  32.  
  33. A_GDT   label   byte
  34.     NullDes    dw    0, 0, 0, 0
  35.     CodeDes    dw    0ffffh        ; limit (bits 24-31)
  36.         db    0, 0, 0        ; base (bits 0-23)
  37.         db    10011011B    ; present / DPL 0 / code / non conforming / readable
  38.         db    11001111B    ; size 4Gb / 32 bits / limit
  39.         db    0        ; base
  40.     DataDes    dw    0ffffh        ; limit (bits 24-31)
  41.         db    0, 0, 0        ; base (bits 0-23)
  42.         db    10010011B    ; present / DPL 0 / data / writeable
  43.         db    10001111B    ; size 4Gb / 32 bits / limit
  44.         db    0        ; base
  45.  
  46. A_GDT_PTR       dw      17h             ; gdt size
  47.                 dd      0               ; gdt linear base
  48.  
  49. ;===================================================
  50.  
  51.  
  52.         .CODE
  53.         .STARTUP       
  54.         CLD
  55.  
  56.  
  57. ; Protected mode fixup. Some programs like TLink from Borland leave the
  58. ; 386 segment registers unusable. This is to get them back.
  59.  
  60.         SMSW    AX
  61.         TEST    AX,1
  62.         JNZ     @@alreadyPM     ; Do not fix if we are already in PM.
  63.  
  64.         PUSH    CS
  65.         SUB     EAX,EAX
  66.         POP     AX
  67.         SHL     EAX,4
  68.         ADD     EAX,OFFSET A_GDT
  69.         MOV     DWORD PTR CS:[A_GDT_PTR].2,EAX
  70.  
  71.         LGDT    QWORD PTR CS:A_GDT_PTR
  72.  
  73.         SMSW    AX
  74.         OR      AX,1
  75.         LMSW    AX                      ; now running on protected mode
  76.  
  77.         JMP     @@ll1                   ; clear prefetch queue
  78. @@ll1:
  79.  
  80.         MOV     AX,10h                 ; adjust data selectors
  81.         MOV     GS,AX
  82.         MOV     FS,AX
  83.  
  84.         MOV     EAX,CR0
  85.         AND     EAX,0FFFFFFFEh
  86.         MOV     CR0,EAX                ; now running on real mode
  87.  
  88.         JMP     @@ll2                   ; clear prefetch queue
  89. @@ll2:
  90.                        
  91.         XOR     AX,AX
  92.         MOV     FS,AX
  93.         MOV     GS,AX
  94.  
  95. @@alreadyPM:
  96.  
  97. ; End of PM fixup.
  98.  
  99.         CALL    InitMusic
  100.  
  101.         CALL    SetupCreditsVideo
  102.  
  103.         CALL    VTDisconnectTimer
  104.  
  105.         MOV     CS:[VBLFullHandler],OFFSET CreditsFullHandler
  106.         XOR     SI,SI
  107.         CALL    InitializeTimerVBL
  108.  
  109.         CALL    VBLVSync
  110.  
  111. MainLoop:
  112.         SetBorder 10, 10, 10
  113.  
  114.         MOV     AX,3
  115.         CALL    VBLVSyncAX
  116.  
  117.         INC     [LoopCounter]
  118.  
  119.         INC     [FrameCounter]
  120.         CMP     [FrameCounter],3
  121.         JC      @@1
  122.          MOV    [FrameCounter],0
  123.    @@1:
  124.  
  125.         SetBorder 0,63,0
  126.  
  127.         CALL    CallMusic
  128.         CALL    CallMusic
  129.         CALL    CallMusic
  130.  
  131.         SetBorder 63,0,0
  132.  
  133.         CALL    DumpFire
  134.  
  135.         MOV     AX,[FireOfs1]
  136.         MOV     BX,[FireOfs2]
  137.  
  138.         MOV     [FireOfs1],BX
  139.         MOV     [FireOfs2],AX
  140.  
  141.         SetBorder 0,63,0
  142.  
  143.         CALL    CallMusic
  144.         CALL    CallMusic
  145.         CALL    CallMusic
  146.  
  147.         SetBorder 63,63,0
  148.  
  149.         CALL    CreateFire
  150.         CALL    CallMusic
  151.         CALL    CallMusic
  152.         CALL    CallMusic
  153.         CALL    MoveFire
  154.  
  155.         SetBorder 0,63,0
  156.  
  157.         CALL    CallMusic
  158.         CALL    CallMusic
  159.         CALL    CallMusic
  160.  
  161.         SetBorder 0,0,63
  162.  
  163.         CALL    WriteSentence
  164.  
  165.         SetBorder 0,63,0
  166.  
  167.         CALL    CallMusic
  168.         CALL    CallMusic
  169.         CALL    CallMusic
  170.  
  171.         CMP     [FireCounter],50+80
  172.         JNC     @@2
  173.          DEC    [FireCounter]
  174.          JZ     ByeBye
  175.          JMP    @@goon
  176.     @@2:
  177.         MOV     BX,41h
  178.         MOV     AL,0
  179.         CALL    VTCheckSemaphore
  180.         JZ      @@goon
  181.          DEC    [FireCounter]
  182.          JZ     ByeBye
  183.     @@goon:
  184.         MOV     AH,1
  185.         INT     16h
  186.         JZ      MainLoop
  187.         XOR     AX,AX
  188.         INT     16h
  189.         SUB     [FireCounter],80
  190.         JBE     ByeBye
  191.         JMP     MainLoop
  192.  
  193. ByeBye:
  194.         CALL    EndTimerVBL
  195.  
  196.         CALL    VTConnectTimer
  197.  
  198.         MOV     AX,3
  199.         INT     10h
  200.  
  201.         CALL    RestoreSystemTime
  202.  
  203.         MOV     AX,4C00h
  204.         INT     21h
  205.  
  206.  
  207. ; =======================================
  208.  
  209. CreditsFullHandler:
  210.         PUSH    DS
  211.         PUSH    BX
  212.         PUSHA
  213.  
  214.         MOV     AX,@data
  215.         MOV     DS,AX
  216.  
  217.         CALL    CtrlFades
  218.  
  219.         POPA
  220.         POP     BX
  221.         POP     DS
  222.         RET
  223.  
  224.  
  225. ; =======================================
  226.  
  227. SetupCreditsVideo1:
  228.  
  229.         MOV     BX,OFFSET PalXlatTable
  230.         XOR     BL,BL
  231.         INC     BH
  232.         MOV     CX,63
  233.         XOR     AL,AL
  234.     @@lp:
  235.          MOV    [BX],AL
  236.          INC    BX
  237.          INC    AL
  238.          LOOP   @@lp
  239.         MOV     CX,256-63
  240.     @@lp1:
  241.          MOV    [BX],AL
  242.          INC    BX
  243.          LOOP   @@lp1
  244.          
  245.         VSync
  246.  
  247.         MOV     BX,SCRW*(216*2 + 16)    ; Value from the BALLS part.
  248.  
  249.         MOV     DX,3D4h                 ; Set the display page.
  250.         MOV     AL,0Ch
  251.         MOV     AH,BH
  252.         OUT     DX,AX
  253.         INC     AL
  254.         MOV     AH,BL
  255.         OUT     DX,AX
  256.  
  257.         VSync
  258.  
  259.         ; Setup the video addressing mode.
  260.  
  261.         MOV     DX,3C0h
  262.         MOV     AL,30h
  263.         OUT     DX,AL
  264.         MOV     AL,01100001b
  265.         OUT     DX,AL 
  266.  
  267.         MOV     DX,3c4h
  268.         MOV     AX,604h                 ; "Unchain my heart". And my VGA...
  269.         OUT     DX,AX
  270.         MOV     AX,0F02h                ; All planes
  271.         OUT     DX,AX
  272.         
  273.         ; Comienzo del modo de Hz reducidos.
  274.  
  275.         MOV     DX,3D4h
  276.         MOV     CX,18h
  277.         MOV     SI,OFFSET CRTCregs
  278.      @@cl1:
  279.          LODSW
  280. ;         OUT    DX,AX
  281.          LOOP   @@cl1
  282.  
  283.         ; Final del modo de Hz reducidos.
  284.  
  285.         MOV     AX,14h                  ; Disable dword mode
  286.         OUT     DX,AX
  287.         MOV     AX,0E317h               ; Enable byte mode.
  288.         OUT     DX,AX
  289.  
  290.         VSync
  291.  
  292.         MOV     DX,3D4h                 ; Set the display page to 0.
  293.         MOV     AL,0Ch
  294.         XOR     AH,AH
  295.         OUT     DX,AX
  296.         INC     AL
  297.         OUT     DX,AX
  298.  
  299.         VSync
  300.  
  301.         XOR     DI,DI                   ; Clear the screen. All planes.
  302.         MOV     AX,0A000h
  303.         MOV     ES,AX
  304.         XOR     AX,AX
  305.         MOV     CX,8000h
  306.         REP STOSW
  307.  
  308.         MOV     SI,OFFSET NormalPalette
  309.         MOV     CX,256
  310.         XOR     AL,AL
  311.         CALL    DumpPalette
  312.  
  313.         RET
  314.  
  315.  
  316. SetupCreditsVideo:
  317.  
  318.         MOV     BX,OFFSET PalXlatTable
  319.         XOR     BL,BL
  320.         INC     BH
  321.         MOV     CX,63
  322.         XOR     AL,AL
  323.     @@lp:
  324.          MOV    [BX],AL
  325.          INC    BX
  326.          INC    AL
  327.          LOOP   @@lp
  328.         MOV     CX,256-63
  329.     @@lp1:
  330.          MOV    [BX],AL
  331.          INC    BX
  332.          LOOP   @@lp1
  333.          
  334.         CALL    ZeroPalette
  335.         MOV     AX,13h
  336.         INT     10h
  337. ;        CALL    ZeroPalette
  338.  
  339.         VSync
  340.         MOV     DX,3C0h
  341.         MOV     AL,30h
  342.         OUT     DX,AL
  343.         MOV     AL,01100001b
  344.         OUT     DX,AL 
  345.  
  346.         MOV     DX,3c4h
  347.         MOV     AX,604h                 ; "Unchain my heart". And my VGA...
  348.         OUT     DX,AX
  349.         MOV     AX,0F02h                ; All planes
  350.         OUT     DX,AX
  351.         
  352.         ; Comienzo del modo de Hz reducidos.
  353.  
  354.         MOV     DX,3D4h
  355.         MOV     CX,18h
  356.         MOV     SI,OFFSET CRTCregs
  357.      @@cl1:
  358.          LODSW
  359. ;         OUT    DX,AX
  360.          LOOP   @@cl1
  361.  
  362.         ; Final del modo de Hz reducidos.
  363.  
  364.         MOV     AX,14h                  ; Disable dword mode
  365.         OUT     DX,AX
  366.         MOV     AX,0E317h               ; Enable byte mode.
  367.         OUT     DX,AX
  368.  
  369.         XOR     DI,DI                   ; Clear the screen. All planes.
  370.         MOV     AX,0A000h
  371.         MOV     ES,AX
  372.         XOR     AX,AX
  373.         MOV     CX,8000h
  374.         REP STOSW
  375.  
  376.         MOV     SI,OFFSET NormalPalette
  377.         MOV     CX,256
  378.         XOR     AL,AL
  379.         CALL    DumpPalette
  380.  
  381.         RET
  382.  
  383.  
  384. ; =======================================
  385.  
  386. GetRandomNumber:
  387.         MOV     AX,[RandSeed]
  388.         MOV     BX,[RandSeed2]
  389.         MOV     BP,[RandSeed3]
  390.         ADD     AX,0a137h
  391.         ADD     BX,63f7h
  392.         ADD     BP,784Ah
  393.         ROL     AX,2
  394.         MOV     [RandSeed],AX
  395.         ADD     BX,AX
  396.         ROR     BX,1
  397.         MOV     [RandSeed2],BX
  398.         SUB     BP,BX
  399.         XOR     AX,BP
  400.         MOV     [RandSeed3],BP
  401.         ADD     AX,BX
  402.         RET
  403.  
  404.  
  405. ; =======================================
  406.  
  407. CreateFire:
  408.         MOV     CX,[FireCounter]
  409.         SUB     CX,50
  410.         JBE     @@ret
  411.  
  412.         CMP     CX,10
  413.         JNZ     @@lp
  414.          ADD    [MsgPtr],2
  415.  
  416.     @@lp:
  417.          CALL    GetRandomNumber
  418.          CMP     AL,80
  419.          JNC     @@nx
  420.           XOR    AH,AH
  421.           ADD    AX,AX
  422.           MOV    SI,[FireOfs1]
  423.           ADD    SI,AX
  424.           ADD    SI,54*80*2
  425.           MOV    WORD PTR [SI],255
  426.    @@nx:
  427.          LOOP   @@lp
  428.    @@ret:
  429.         RET
  430.  
  431.  
  432. ; =======================================
  433.  
  434. MoveFire:
  435.         PUSH    DS
  436.         POP     ES
  437.  
  438.         MOV     SI,[FireOfs1]
  439.         MOV     DI,[FireOfs2]
  440.         ADD     SI,81*2
  441.  
  442.         MOV     CX,80*57
  443.         MOV     DX,[SI-6]
  444.         ADD     DX,[SI-4]
  445.         ADD     DX,[SI-2]
  446.         MOV     BX,[SI-6+80*4]
  447.         ADD     BX,[SI-4+80*4]
  448.         ADD     BX,[SI-2+80*4]
  449.  
  450.     @@lp:
  451.          REPT 32
  452.  
  453.           ADD   DX,[SI]
  454.           SUB   DX,[SI-6]
  455.           ADD   BX,[SI+80*4]
  456.           SUB   BX,[SI+80*4-6]
  457.           MOV   AX,BX
  458.           ADD   AX,DX
  459.           ADD   AX,[SI+80*2]
  460.           ADD   AX,[SI+80*2-4]
  461.           SHR   AX,3
  462.           JZ    SMALL @@sal
  463.           DEC   AX
  464.           STOSW
  465.           ADD   SI,2
  466.           DEC   CX
  467.           JZ    SMALL @@Fin
  468.  
  469.          ENDM
  470.  
  471.          LOOP   SMALL @@lp
  472.     @@Fin:
  473.  
  474.         RET
  475.  
  476.     @@sal:
  477.         XOR     AX,AX
  478.         STOSW
  479.         ADD     SI,2
  480.         LOOP    SMALL @@lp
  481.  
  482.         RET
  483.  
  484.  
  485. ; =======================================
  486.  
  487. DumpFire:
  488.         MOV     DX,3C4h
  489.         MOV     AX,0F02h                ; All planes
  490.         OUT     DX,AX
  491.  
  492.         MOV     DX,3CEh                 ; Bitmask...
  493.         MOV     AX,03F08h               ; 00111111b
  494.         OUT     DX,AX
  495.                      
  496.         MOV     BX,OFFSET PalXlatTable
  497.         XOR     BL,BL
  498.         INC     BH
  499.  
  500.         MOV     SI,[FireOfs2]
  501.         XOR     DI,DI
  502.         ADD     SI,80*2
  503.  
  504.         MOV     AX,0A000h
  505.         MOV     ES,AX
  506.  
  507.         CMP     [EraseMsg],0
  508.         JZ      @@noera
  509.          MOV    [EraseMsg],0
  510.          MOV    AH,ES:[0]
  511.          MOV    CX,50
  512.          CALL   @@DumpOnly
  513.          JMP    @@Fin
  514.                      
  515.     @@noera:
  516.         MOV     AH,ES:[0]
  517.         MOV     CX,23
  518.         CALL    @@DumpOnly
  519. COMMENT #
  520.         MOV     CX,4
  521.         CALL    @@DumpText
  522.  
  523.         MOV     AH,ES:[0]
  524.         MOV     CX,4
  525.         CALL    @@DumpOnly
  526. #
  527.         MOV     CX,4
  528.         CALL    @@DumpText
  529.  
  530.         MOV     AH,ES:[0]
  531.         MOV     CX,4
  532.         CALL    @@DumpOnly
  533.  
  534.         MOV     CX,4
  535.         CALL    @@DumpText
  536.  
  537.         MOV     AH,ES:[0]
  538.         MOV     CX,23-8
  539.         CALL    @@DumpOnly
  540.     @@Fin:
  541.         MOV     DX,3CEh                 ; Bitmask...
  542.         MOV     AX,0FF08h               ; 11111111b
  543.         OUT     DX,AX
  544.                      
  545.         RET
  546.  
  547.  
  548. @@DumpText:
  549.  
  550.     @@lp1:
  551.          REPT 80
  552.  
  553.           LODSW
  554.           MOV   BL,AL
  555.           MOV   AL,[BX]
  556.           MOV   AH,ES:[DI+80]
  557.           MOV   ES:[DI+80  ],AL
  558.           MOV   AH,ES:[DI+80*2]
  559.           MOV   ES:[DI+80*2],AL
  560.           MOV   AH,ES:[DI+80*3]
  561.           MOV   ES:[DI+80*3],AL
  562.           MOV   AH,ES:[DI]
  563.           STOSB
  564.  
  565.          ENDM
  566.  
  567.          ADD    DI,80*3
  568.  
  569.          LOOP   SMALL @@lp1
  570.  
  571.         RET
  572.  
  573. @@DumpOnly:
  574.  
  575.     @@lp:
  576.          REPT 40
  577.  
  578.           LODSW
  579.           MOV   BL,AL
  580.           MOV   AL,[BX]
  581.           MOV   BL,[SI]
  582.           MOV   AH,[BX]
  583.           ADD   SI,2
  584.           MOV   ES:[DI+80  ],AX
  585.           MOV   ES:[DI+80*2],AX
  586.           MOV   ES:[DI+80*3],AX
  587.           STOSW
  588.  
  589.          ENDM
  590.  
  591.          ADD    DI,80*3
  592.  
  593.          LOOP   SMALL @@lp
  594.  
  595.         RET
  596.  
  597.  
  598. ; =======================================
  599.  
  600. CheckChar MACRO Src, Dest
  601. LOCAL @@p
  602.         CMP     AL,Src
  603.         JNZ     @@p
  604.          MOV    AL,Dest
  605.          JMP    @@px
  606.     @@p:
  607. ENDM
  608.  
  609. WriteSentence:
  610.         MOV     SI,[MsgPtr]
  611.         LODSB
  612.         AND     AL,AL
  613.         JZ      @@Sync2
  614.         CMP     AL,1
  615.         JZ      @@Sync
  616.         CMP     AL,2
  617.         JNZ     @@dochar
  618.  
  619.         ADD     [ScrPtr],SCRW*31
  620.         ADD     [BlastPtr],SCRW*3
  621.         LODSB
  622.  
  623.     @@dochar:
  624.         MOV     [MsgPtr],SI
  625.  
  626.         CheckChar '.', 'Z'-'A'+1
  627.         CheckChar '!', 'Z'-'A'+2
  628.         CheckChar ':', 'Z'-'A'+3
  629.         CheckChar '-', 'Z'-'A'+4
  630.         CheckChar '(', 'Z'-'A'+5
  631.         CheckChar ')', 'Z'-'A'+6
  632.         CheckChar '3', 'Z'-'A'+7
  633.         CheckChar '0', 'Z'-'A'+8
  634.         CheckChar '?', 'Z'-'A'+9
  635.         CheckChar '1', 'Z'-'A'+10
  636.         CheckChar '2', 'Z'-'A'+11
  637.         CheckChar '4', 'Z'-'A'+12
  638.         CheckChar '5', 'Z'-'A'+13
  639.         CheckChar '6', 'Z'-'A'+14
  640.         CheckChar '8', 'Z'-'A'+15
  641.         CheckChar ',', 'Z'-'A'+16
  642.         CheckChar ';', 'Z'-'A'+17
  643.         CheckChar '9', 'Z'-'A'+18
  644.         CheckChar ' ', 59
  645.  
  646.         SUB     AL,'A'
  647.  
  648.     @@px:
  649.         PUSH    AX
  650.  
  651.         MOV     AH,AL
  652.         XOR     AL,AL
  653.  
  654.         MOV     SI,OFFSET DGROUP:FireFont
  655.         ADD     SI,AX
  656.  
  657.         MOV     DX,3CEh                 ; Bitmask...
  658.         MOV     AX,0C008h               ; 11000000b
  659.         OUT     DX,AX
  660.                      
  661.         MOV     DI,[ScrPtr]
  662.  
  663.         MOV     AX,0A000h
  664.         MOV     ES,AX
  665.         MOV     BL,11h
  666.         MOV     CX,16
  667.     @@lp0:
  668.          PUSH   CX
  669.          PUSH   DI
  670.  
  671.          MOV    DX,3C4h
  672.          MOV    AL,2
  673.          MOV    AH,BL
  674.          OUT    DX,AX
  675.  
  676.          MOV    CX,8
  677.     @@lp1:
  678.           LODSW
  679.           MOV   BH,ES:[DI]
  680.           MOV   ES:[DI],AL
  681.           MOV   BH,ES:[DI+SCRW]
  682.           MOV   ES:[DI+SCRW],AH
  683.           ADD   DI,SCRW*2
  684.           LOOP  @@lp1
  685.  
  686.          POP    DI
  687.          ROL    BL,1
  688.          JNC    @@c1
  689.           INC   DI
  690.     @@c1:POP    CX
  691.          LOOP   @@lp0
  692.         
  693.         POP     AX
  694.  
  695.         PUSH    DS
  696.         POP     ES
  697.         MOV     DI,[BlastPtr]
  698.         MOV     SI,OFFSET DGROUP:FireBlastFont
  699.         XOR     AH,AH
  700.         SHL     AX,4
  701.         ADD     SI,AX
  702.         MOV     CX,4
  703.     @@lpb:
  704.          MOVSW
  705.          MOVSW
  706.          ADD    DI,SCRW-4
  707.          LOOP   @@lpb
  708.  
  709.         ADD     [ScrPtr],4
  710.         ADD     [BlastPtr],4
  711.  
  712.         MOV     DX,3C4h
  713.         MOV     AX,0F02h                ; All planes
  714.         OUT     DX,AX
  715.  
  716.         MOV     DX,3CEh                 ; Bitmask...
  717.         MOV     AX,0FF08h               ; 11111111b
  718.         OUT     DX,AX
  719.                      
  720.     @@ret:
  721.         RET
  722.  
  723. @@Sync:
  724.         MOV     [MsgPtr],SI
  725.         MOV     AL,[Color]
  726.         XOR     AH,AH
  727.         MOV     BX,64*9
  728.         MUL     BX
  729.         ADD     AX,OFFSET TextPalettes
  730.         MOV     [ColorPal],AX
  731.         MOV     SI,OFFSET NormalPalette
  732.         MOV     DI,OFFSET PaletteBuf
  733.         PUSH    DS
  734.         POP     ES
  735.         MOV     CX,64*9/2
  736.         REP MOVSW
  737.         MOV     [FadeCount],0
  738.         MOV     [Finished],0
  739.         MOV     [FadeMode],0
  740.         RET
  741.  
  742. @@Sync2:
  743.         CMP     BYTE PTR [SI],255
  744.         JNZ     @@1
  745.          MOV    [DoFade2],0
  746.     @@1:
  747.         CMP     BYTE PTR [SI],254
  748.         JZ      @@2
  749.  
  750.         CMP     [Finished],0
  751.         JZ      @@ret
  752.     @@2:
  753.         LODSB
  754.         CMP     AL,255
  755.         JZ      @@ret
  756.  
  757.         PUSH    AX
  758.         PUSH    SI
  759.  
  760.         MOV     SI,OFFSET BlastBuf
  761.         MOV     DI,SCRW*23*2
  762.         ADD     DI,[FireOfs2]
  763.         MOV     CX,SCRW*2
  764.     @@l1:
  765.          LODSW
  766.          ADD    AX,AX
  767.          OR     [DI],AL
  768.          ADD    DI,2
  769.          OR     [DI],AH
  770.          ADD    DI,2
  771.          LOOP   @@l1
  772.  
  773.         ADD     DI,SCRW*8
  774.         MOV     CX,SCRW*2
  775.     @@l2:
  776.          LODSW
  777.          ADD    AX,AX
  778.          OR     [DI],AL
  779.          ADD    DI,2
  780.          OR     [DI],AH
  781.          ADD    DI,2
  782.          LOOP   @@l2
  783.  
  784.         PUSH    DS
  785.         POP     ES
  786.  
  787.         MOV     DI,OFFSET BlastBuf
  788.         MOV     CX,SCRW*4
  789.         XOR     AX,AX
  790.         REP STOSW
  791.  
  792.         POP     SI
  793.         POP     AX
  794.  
  795.         MOV     [EraseMsg],1
  796.         MOV     [FadeMode],2
  797.         MOV     [MsgPtr],SI
  798.         MOV     [ScrPtr],SCRW*23*4
  799.         MOV     [BlastPtr],OFFSET BlastBuf
  800.         MOV     [Color],AL
  801.         RET
  802.  
  803.  
  804. ; =======================================
  805.  
  806. CtrlFades:
  807.         MOV     AL,[Alternate]
  808.         XOR     AH,AH
  809.         MOV     BX,32*3
  810.         MUL     BX
  811.         MOV     BL,AL
  812.         ADD     BL,64
  813.         MOV     CX,AX
  814.         ADD     CX,AX
  815.         ADD     CX,AX
  816.  
  817.         CMP     [FadeMode],0
  818.         JZ      @@Mode0
  819.         CMP     [FadeMode],1
  820.         JZ      @@Mode1
  821.         CMP     [FadeMode],2
  822.         JZ      @@Mode2
  823.         CMP     [FadeMode],3
  824.         JNZ     @@Fin
  825.  
  826. @@Mode2:
  827.         MOV     SI,OFFSET NormalPalette + 64*3
  828.         ADD     SI,CX
  829.         MOV     CX,32*3
  830.         MOV     AL,BL
  831.         CALL    DumpPalette
  832.         INC     [FadeMode]
  833.         JMP     @@Fin
  834.  
  835. @@Mode0:
  836.         PUSH    CX
  837.  
  838.         MOV     SI,OFFSET PaletteBuf
  839.         ADD     SI,CX
  840.         MOV     CX,32*3
  841.         MOV     AL,BL
  842.         CALL    DumpPalette
  843.  
  844.         POP     CX
  845.  
  846.         MOV     SI,[ColorPal]
  847.         MOV     DI,OFFSET PaletteBuf
  848.         ADD     SI,CX
  849.         ADD     DI,CX
  850.         MOV     CX,32*3
  851.         MOV     DX,[FadeCount]
  852.         TEST    DL,2
  853.         JNZ     @@no0
  854.         SHL     DX,6
  855.         XOR     DH,DH
  856.         CALL    FadePal
  857.     @@no0:
  858.         INC     [FadeCount]
  859.         CMP     [FadeCount],256
  860.         JC      @@Fin
  861.  
  862.         MOV     [FadeCount],0
  863.  
  864.         MOV     [FadeMode],1
  865.         CMP     [DoFade2],1
  866.         JZ      @@Fin
  867.         MOV     [FadeMode],255
  868.         JMP     @@Fin
  869.  
  870. @@Mode1:
  871.         PUSH    CX
  872.  
  873.         MOV     SI,OFFSET PaletteBuf
  874.         ADD     SI,CX
  875.         MOV     CX,32*3
  876.         MOV     AL,BL
  877.         CALL    DumpPalette
  878.  
  879.         POP     CX
  880.  
  881.         MOV     DI,OFFSET PaletteBuf
  882.         ADD     DI,CX
  883.         MOV     CX,32*3
  884.         MOV     DX,[FadeCount]
  885.         SHL     DX,7
  886.         MOV     DL,64
  887.         SUB     DL,DH
  888.         MOV     DH,DL
  889.         MOV     DL,63
  890.         CALL    FadeCol
  891.  
  892.         INC     [FadeCount]
  893.         CMP     [FadeCount],129
  894.         JC      @@Fin
  895.  
  896.         MOV     [Finished],1
  897.         MOV     [FadeMode],255
  898.  
  899. @@Fin:
  900.         XOR     [Alternate],1
  901.         RET
  902.  
  903.  
  904. ; =======================================
  905. ; =======================================
  906. ; =======================================
  907. ; =======================================
  908. ; =======================================
  909. ; =======================================
  910. ; =======================================
  911.  
  912.  
  913.         .DATA
  914.  
  915. CRTCregs LABEL BYTE                                               ; Modo 13h
  916.   DB 11h, 04h       ; End   vertical retrace. (0-0Fh)             ; DB 11h, 8Eh
  917.   DB 00h, 64h       ; Horizontal total.                           ; DB 00h, 5Fh
  918.   DB 01h, 4Fh       ; Horizontal display enable end.              ; DB 01h, 4Fh
  919.   DB 02h, 50h       ; Start horizontal blanking.                  ; DB 02h, 50h
  920.   DB 03h, 80h+07h   ; End   horizontal blanking. (0-1Fh)          ; DB 03h, 82h
  921.   DB 04h, 5Bh       ; Start horizontal retrace.                   ; DB 04h, 54h
  922.   DB 05h, 80h+05h   ; End   horizontal retrace. (0-1Fh)           ; DB 05h, 80h
  923.   DB 06h,0FFh       ; Vertical total. (+7.0 +7.5)                 ; DB 06h, BFh
  924.   DB 07h, 00011111b ; Overflow (high bits of vertical registers). ; DB 07h, 1Fh
  925.   DB 08h, 00h                                                     ; DB 08h, 00h
  926.   DB 09h, 41h                                                     ; DB 09h, 41h
  927.   DB 0Ah, 00h                                                     ; DB 0Ah, 00h
  928.   DB 0Bh, 00h                                                     ; DB 0Bh, 00h
  929.   DB 0Ch, 00h                                                     ; DB 0Ch, 00h
  930.   DB 0Dh, 00h                                                     ; DB 0Dh, 00h
  931.   DB 0Eh, 00h                                                     ; DB 0Eh, 00h
  932.   DB 0Fh, 00h                                                     ; DB 0Fh, 00h
  933.   DB 10h,0C0h       ; Start vertical retrace. (+7.2 +7.7)         ; DB 10h, 9Ch
  934. ;                 
  935. ;    11h      ────┘ ; End   vertical retrace. (0-0Fh)
  936.   DB 12h, 8Fh       ; Vertical display enable end. (+7.1 +7.6)    ; DB 12h, 8Fh
  937.   DB 13h, 28h                                                     ; DB 13h, 28h
  938.   DB 14h, 40h                                                     ; DB 14h, 40h
  939.   DB 15h,097h       ; Start vertical blanking. (+7.3 +9.5)        ; DB 15h, 96h
  940.   DB 16h,0F8h       ; End   vertical blanking.                    ; DB 16h, B9h
  941.   DB 17h,0A3h                                                     ; DB 17h, A3h
  942.   DB 18h,0FFh                                                     ; DB 18h, FFh
  943.  
  944. ALIGN 2
  945.  
  946. FrameCounter DW 0
  947. RandSeed     DW 348Bh
  948. RandSeed2    DW 7F34h
  949. RandSeed3    DW 32bfh
  950.  
  951. LoopCounter     DW 0
  952.  
  953. NormalPalette LABEL BYTE
  954.  
  955. ; ----- Normal Palette. ------------
  956.  
  957.         DB        0,   0,   0,   0,   1,   1,   0,   4,   5,   0,   7,   9
  958.     DB      0,   8,  11,   0,   9,  12,  15,   6,   8,  25,   4,   4
  959.     DB     33,   3,   3,  40,   2,   2,  48,   2,   2,  55,   1,   1
  960.     DB     63,   0,   0,  63,   0,   0,  63,   3,   0,  63,   7,   0
  961.     DB     63,  10,   0,  63,  13,   0,  63,  16,   0,  63,  20,   0
  962.     DB     63,  23,   0,  63,  26,   0,  63,  29,   0,  63,  33,   0
  963.     DB     63,  36,   0,  63,  39,   0,  63,  39,   0,  63,  40,   0
  964.     DB     63,  40,   0,  63,  41,   0,  63,  42,   0,  63,  42,   0
  965.     DB     63,  43,   0,  63,  44,   0,  63,  44,   0,  63,  45,   0
  966.     DB     63,  45,   0,  63,  46,   0,  63,  47,   0,  63,  47,   0
  967.     DB     63,  48,   0,  63,  49,   0,  63,  49,   0,  63,  50,   0
  968.     DB     63,  51,   0,  63,  51,   0,  63,  52,   0,  63,  53,   0
  969.     DB     63,  53,   0,  63,  54,   0,  63,  55,   0,  63,  55,   0
  970.     DB     63,  56,   0,  63,  57,   0,  63,  57,   0,  63,  58,   0
  971.     DB     63,  58,   0,  63,  59,   0,  63,  60,   0,  63,  60,   0
  972.         DB       63,  61,   0,  63,  62,   0,  63,  62,   0,  63,  63,  63
  973.  
  974.         DB        0,   0,   0,   0,   1,   1,   0,   4,   5,   0,   7,   9
  975.     DB      0,   8,  11,   0,   9,  12,  15,   6,   8,  25,   4,   4
  976.     DB     33,   3,   3,  40,   2,   2,  48,   2,   2,  55,   1,   1
  977.     DB     63,   0,   0,  63,   0,   0,  63,   3,   0,  63,   7,   0
  978.     DB     63,  10,   0,  63,  13,   0,  63,  16,   0,  63,  20,   0
  979.     DB     63,  23,   0,  63,  26,   0,  63,  29,   0,  63,  33,   0
  980.     DB     63,  36,   0,  63,  39,   0,  63,  39,   0,  63,  40,   0
  981.     DB     63,  40,   0,  63,  41,   0,  63,  42,   0,  63,  42,   0
  982.     DB     63,  43,   0,  63,  44,   0,  63,  44,   0,  63,  45,   0
  983.     DB     63,  45,   0,  63,  46,   0,  63,  47,   0,  63,  47,   0
  984.     DB     63,  48,   0,  63,  49,   0,  63,  49,   0,  63,  50,   0
  985.     DB     63,  51,   0,  63,  51,   0,  63,  52,   0,  63,  53,   0
  986.     DB     63,  53,   0,  63,  54,   0,  63,  55,   0,  63,  55,   0
  987.     DB     63,  56,   0,  63,  57,   0,  63,  57,   0,  63,  58,   0
  988.     DB     63,  58,   0,  63,  59,   0,  63,  60,   0,  63,  60,   0
  989.         DB       63,  61,   0,  63,  62,   0,  63,  62,   0,  63,  63,  63
  990.  
  991.         DB        0,   0,   0,   0,   1,   1,   0,   4,   5,   0,   7,   9
  992.     DB      0,   8,  11,   0,   9,  12,  15,   6,   8,  25,   4,   4
  993.     DB     33,   3,   3,  40,   2,   2,  48,   2,   2,  55,   1,   1
  994.     DB     63,   0,   0,  63,   0,   0,  63,   3,   0,  63,   7,   0
  995.     DB     63,  10,   0,  63,  13,   0,  63,  16,   0,  63,  20,   0
  996.     DB     63,  23,   0,  63,  26,   0,  63,  29,   0,  63,  33,   0
  997.     DB     63,  36,   0,  63,  39,   0,  63,  39,   0,  63,  40,   0
  998.     DB     63,  40,   0,  63,  41,   0,  63,  42,   0,  63,  42,   0
  999.     DB     63,  43,   0,  63,  44,   0,  63,  44,   0,  63,  45,   0
  1000.     DB     63,  45,   0,  63,  46,   0,  63,  47,   0,  63,  47,   0
  1001.     DB     63,  48,   0,  63,  49,   0,  63,  49,   0,  63,  50,   0
  1002.     DB     63,  51,   0,  63,  51,   0,  63,  52,   0,  63,  53,   0
  1003.     DB     63,  53,   0,  63,  54,   0,  63,  55,   0,  63,  55,   0
  1004.     DB     63,  56,   0,  63,  57,   0,  63,  57,   0,  63,  58,   0
  1005.     DB     63,  58,   0,  63,  59,   0,  63,  60,   0,  63,  60,   0
  1006.         DB       63,  61,   0,  63,  62,   0,  63,  62,   0,  63,  63,  63
  1007.  
  1008.         DB        0,   0,   0,   0,   1,   1,   0,   4,   5,   0,   7,   9
  1009.     DB      0,   8,  11,   0,   9,  12,  15,   6,   8,  25,   4,   4
  1010.     DB     33,   3,   3,  40,   2,   2,  48,   2,   2,  55,   1,   1
  1011.     DB     63,   0,   0,  63,   0,   0,  63,   3,   0,  63,   7,   0
  1012.     DB     63,  10,   0,  63,  13,   0,  63,  16,   0,  63,  20,   0
  1013.     DB     63,  23,   0,  63,  26,   0,  63,  29,   0,  63,  33,   0
  1014.     DB     63,  36,   0,  63,  39,   0,  63,  39,   0,  63,  40,   0
  1015.     DB     63,  40,   0,  63,  41,   0,  63,  42,   0,  63,  42,   0
  1016.     DB     63,  43,   0,  63,  44,   0,  63,  44,   0,  63,  45,   0
  1017.     DB     63,  45,   0,  63,  46,   0,  63,  47,   0,  63,  47,   0
  1018.     DB     63,  48,   0,  63,  49,   0,  63,  49,   0,  63,  50,   0
  1019.     DB     63,  51,   0,  63,  51,   0,  63,  52,   0,  63,  53,   0
  1020.     DB     63,  53,   0,  63,  54,   0,  63,  55,   0,  63,  55,   0
  1021.     DB     63,  56,   0,  63,  57,   0,  63,  57,   0,  63,  58,   0
  1022.     DB     63,  58,   0,  63,  59,   0,  63,  60,   0,  63,  60,   0
  1023.         DB       63,  61,   0,  63,  62,   0,  63,  62,   0,  63,  63,  63
  1024.  
  1025.  
  1026. TextPalettes LABEL BYTE
  1027. GreenPal LABEL BYTE
  1028.         DB 64 DUP (0, 16, 0)
  1029.         DB 64 DUP (0, 40, 0)
  1030.         DB 64 DUP (0, 63, 0)
  1031.  
  1032. BluePal LABEL BYTE
  1033.         DB 64 DUP ( 0, 16, 30)
  1034.         DB 64 DUP ( 0, 26, 50)
  1035.         DB 64 DUP (14, 40, 63)
  1036.  
  1037. MagPal LABEL BYTE
  1038.         DB 64 DUP (21,  0, 39)
  1039.         DB 64 DUP (34, 12, 51)
  1040.         DB 64 DUP (46, 23, 63)
  1041.  
  1042. CyanPal LABEL BYTE
  1043.         DB 64 DUP ( 0, 21, 39)
  1044.         DB 64 DUP (12, 33, 51)
  1045.         DB 64 DUP (23, 45, 63)
  1046.                    
  1047. GrayPal LABEL BYTE
  1048.         DB 64 DUP (16, 16, 16)
  1049.         DB 64 DUP (40, 40, 40)
  1050.         DB 64 DUP (63, 63, 63)
  1051.  
  1052. EmptyPalette DB 768 DUP(0)
  1053.  
  1054. EVENDATA
  1055.  
  1056. ScrOffsets LABEL WORD
  1057.  
  1058.         i = 0
  1059.  
  1060.         REPT 200
  1061.           DW i
  1062.           i = i + SCRW
  1063.         ENDM
  1064.  
  1065.  
  1066. ArrayFire1 DW 80*60 DUP(00)
  1067.            DW 80*5 DUP(0)
  1068. ArrayFire2 DW 80*65 DUP(0)
  1069.  
  1070. FireOfs1   DW OFFSET ArrayFire1
  1071. FireOfs2   DW OFFSET ArrayFire2
  1072.  
  1073. PalXlatTable DB 512 DUP(0)
  1074.  
  1075. PaletteBuf DB 64*9 DUP(0)
  1076.  
  1077. BlastBuf DB SCRW*4*2 DUP(0)
  1078.  
  1079. EraseMsg  DB 0
  1080. DoFade2   DB 1
  1081. FadeMode  DB 0
  1082. Alternate DB 0
  1083. Finished  DB 1
  1084. Color     DB 0
  1085. FadeCount DW 0
  1086. ColorPal  DW 0
  1087. FireCounter DW 80+50
  1088.  
  1089. MsgPtr   DW OFFSET NullMsg
  1090. ScrPtr   DW SCRW*23*4
  1091. BlastPtr DW OFFSET BlastBuf
  1092.           
  1093.  
  1094. NullMsg DB 0
  1095. Message LABEL BYTE
  1096.         DB 0, '                    ', 1, 0
  1097.         DB 4, ' THIS IS THE END OF ', 2
  1098.         DB    ' THE INCONEXIA DEMO ', 1, 0
  1099.  
  1100.         DB 0, ' MEMBERS OF IGUANA: ', 1, 0
  1101.         DB 1, '        JCAB        ', 2
  1102.         DB    '        CODER       ', 1, 0
  1103.         DB 2, '        JARE        ', 2
  1104.         DB    '        CODER       ', 1, 0
  1105.         DB 3, '         COI        ', 2
  1106.         DB    '   GRAFIX-MUSICIAN  ', 1, 0
  1107.         DB 1, '      THRYXXON      ', 2
  1108.         DB    '      MUSICIAN      ', 1, 0
  1109.         DB 2, '       MIGUEL       ', 2
  1110.         DB    '      SYSOP-PR      ', 1, 0
  1111.  
  1112.         DB 4, ' COLLABORATIONS BY: ', 1, 0
  1113.         DB 3, '         ARM        ', 2
  1114.         DB    '        CODER       ', 1, 0
  1115.         DB 1, '      RED DEVIL     ', 2
  1116.         DB    '     FONTS-IDEAS    ', 1, 0
  1117.         DB 2, '  303 ACID FACTORY  ', 2
  1118.         DB    '      MUSICIAN      ', 1, 0
  1119.         DB 3, '        D.J.        ', 2
  1120.         DB    ' INSTRUMENT SAMPLER ', 1, 0
  1121.  
  1122.         DB 4, '  HARDWARE WE USED: ', 1, 0
  1123.         DB 1, '  386-25 (UNCACHED) ', 2
  1124.         DB    'CACHES ARE LAME! ;-)', 1, 0
  1125.         DB 2, '  HICOLOR ET-4000   ', 2
  1126.         DB    '  SB 2.0 (NO PRO)   ', 1, 0
  1127.         DB 3, '  1200 DPI SCANNER  ', 2
  1128.         DB    ' TASM 3.2 - TP 6.0  ', 1, 0
  1129.         DB 1, 'ANTI-TLINK PROT SYST', 2
  1130.         DB    '   (BY OURSELVES)   ', 1, 0
  1131.         DB 2, ' TRITON FASTRACKER  ', 2
  1132.         DB    '(GREAT JOB, MR. H!) ', 1, 0
  1133.         DB 0, ' AND OF COURSE ...  ', 2
  1134.         DB    'THE VANGELISTRACKER ', 1, 0
  1135.         DB 0, 'IN FACT, THE DEMOVT ', 2
  1136.         DB    'SOON TO BE RELEASED ', 1, 0
  1137.         DB 4, 'THE WHOLE INCONEXIA ', 1, 0
  1138.         DB 4, ' HAS BEEN SEQUENCED ', 2
  1139.         DB    '    USING DEMOVT    ', 1, 0
  1140.         DB 0, ' TO CONTACT IGUANA  ', 1, 0
  1141.         DB 0, ' CALL BLASTERSOUND  ', 2
  1142.         DB    ' BBS: 34-58-293583  ', 1, 0
  1143.         DB 0, '(C) MCMXCIII  IGUANA', 1, 0
  1144.  
  1145.         DB 255
  1146.         DB 0, 254
  1147.         DB 0, 255
  1148.  
  1149.         END
  1150. ; ------------------------ End of CREDITS.ASM ---------------------------
  1151.  
  1152.